package com.hzdl.week02;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 1.企业发放的奖金根据利润提成。
 * 利润(I)低于或等于10万元时，奖金可提10%；
 * 利润高于10万元，低于20万元时，低于10万元的部分按10%提成，
 * 高于10万元的部分，可提成7.5%；
 * 20万到40万之间时，高于20万元的部分，可提成5%；
 * 40万到60万之间时高于40万元的部分，可提成3%；
 * 60万到100万之间时，高于60万元的部分，可提成1.5%，
 * 高于100万元时，超过100万元的部分按1%提成，
 * 从键盘输入当月利润，求应发放奖金总数？
 * <p>
 * 2.有5个人坐在一起，
 * 问第五个人多少岁？他说比第4个人大2岁。
 * 问第4个人岁数，他说比第3个人大2岁。
 * 问第三个人，又说比第2人大两岁。
 * 问第2个人，说比第一个人大两岁。
 * 最后问第一个人，他说是10岁。
 * 请问第五个人多大？——循环
 * <p>
 * 3.一球从100米高度自由落下，每次落地后反跳回原高度的一半；
 * 再落下，求它在 第10次落地时，共经过多少米？第10次反弹多高？——循环
 * <p>
 * 4.4.在计算机上打印出以下图案，每次只能打印一个 *  (15分，考点：嵌套循环)
 * 1
 * 212
 * 32123
 * 4321234
 * 543212345
 * 65432123456
 * <p>
 * 5.有一个已经排好序的数组{1,2,5,6,14,36,37,55}。
 * 现键盘随便输入一个数，求插入数之后新的数组
 */
public class Week02_01 {
    public static void main(String[] args) {
        //键盘录入
//        System.out.println("请输入利润：");
//        Scanner scanner = new Scanner(System.in);
        //1
//        getBonus(scanner);
        //2
//        getAge();
        //3
//        getBall();
        //4
//        printNums();
        //5有一个已经排好序的数组{1,2,5,6,14,36,37,55}。现键盘随便输入一个数，求插入数之后新的数组
//        sortNewArr();
        //6.现在有如下的一个数组：(15分，考点：数组)
        //int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        //   要求将以上数组中值为0的项去掉，将不为0的值存入一个
        //新的数组，生成的新数组为：
        //newArr[]={1,3,4,5,6,6,5,4,7,6,7,5}
        //最后输出有几个零，且最后一个零在oldArr中的下标是多少？
//        arrZero();
        // 7.现在给出两个数组：(15分，考点：数组、排序)
        //   数组a_arr：“1，7，9，11，13，15，17，19：
        //   数组b_arr：“2，4，6，8，10”
        //   实现功能: 两个数组合并为数组c_arr，按降序排列（从大到小排序）
//        abcArr();
        //8.古典问题（10分，考点：递归）：小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.
        // 第二天早上又将剩下的桃子吃一半,又多吃一个.
        // 以后每天早上吃前一天剩下的一半另一个.
        // 到第10天早上猴子想再吃时发现,只剩下一个桃子了.
        // 问第一天猴子共摘多少个桃子？

        /*int sum = calPeach(1);
        System.out.println("第一天猴子共摘 " + sum + " 个桃子");*/
        /*附加题：输入某年某月某日，判断这一天是这一年的第几天？（20分，考点：控制语句）
        程序分析：以3月5日为例，应该先把前两个月的加起来，然后再加上5天即本年的第几天；
        特殊情况：闰年的2月份为29天，平年的2月份为28天。
        闰年的条件：year除以400能整除，或者year除以4能整除但是不能被100整除;
        即“四年一闰，百年不闰，四百年又闰”；*/
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份：");
        int year = scanner.nextInt();
        System.out.println("请输入月份：");
        int month = scanner.nextInt();
        System.out.println("请输入日数：");
        int day = scanner.nextInt();
        int days = 0;
        switch (month) {
            case 1:
                days = day;
                break;
            case 2:
                days = 31 + day;
                break;
            case 3:
                days = 31 + 28 + day;
                break;
            case 4:
                days = 31 + 28 + 31 + day;
                break;
            case 5:
                days = 31 + 28 + 31 + 30 + day;
                break;
            case 6:
                days = 31 + 28 + 31 + 30 + 31 + day;
                break;
            case 7:
                days = 31 + 28 + 31 + 30 + 31 + 30 + day;
                break;
            case 8:
                days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;
                break;
            case 9:
                days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day;
                break;
            case 10:
                days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;
                break;
            case 11:
                days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
                break;
            default:
                days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;
                break;
        }
        //判断闰年
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            System.out.println(year + "年是闰年");
            if (month > 2) {
                System.out.println("这一天是这一年的第" + (days + 1) + "天");
            } else {
                System.out.println("这一天是这一年的第" + days + "天");
            }
        } else {
            System.out.println("这一天是这一年的第" + days + "天");
        }
    }

    public static int calPeach(int days) {
        if (days == 10) {
            return 1;
        } else return 2 * calPeach(days + 1) + 2;//Sn = 2(Sn+1 + 1) = 2Sn+1 + 2

    }

    private static void abcArr() {
        int[] a_arr = {1, 7, 9, 11, 13, 15, 17, 19};
        int[] b_arr = {2, 4, 6, 8, 10};
        int[] c_arr = new int[a_arr.length + b_arr.length];
        System.arraycopy(a_arr, 0, c_arr, 0, a_arr.length);
        System.arraycopy(b_arr, 0, c_arr, a_arr.length, b_arr.length);
        Arrays.sort(c_arr);
        System.out.println("升序排列：" + Arrays.toString(c_arr));
        //冒泡降序
        int temp = 0;
        for (int i = 0; i < c_arr.length - 1; i++) {
            for (int j = 0; j < c_arr.length - 1 - i; j++) {
                if (c_arr[j] < c_arr[j + 1]) {
                    temp = c_arr[j];
                    c_arr[j] = c_arr[j + 1];
                    c_arr[j + 1] = temp;
                }
            }
        }
        System.out.println("降序排列:" + Arrays.toString(c_arr));
    }

    private static void arrZero() {
        int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
        int counts = 0;
        int index = 0;
        for (int i = 0; i < oldArr.length; i++) {
            if (oldArr[i] == 0) {
                counts++;
                index = i;
            }
        }
        int[] newArr = new int[oldArr.length - counts];
        int j = 0;
        for (int k : oldArr) {
            if (k != 0) {
                newArr[j] = k;
                j++;
            }
        }
        System.out.println("去除0后的数组为：" + Arrays.toString(newArr));
        System.out.println("oldArr数组中有 " + counts + "个零。");
        System.out.println("最后一个零在oldArr中的下标是 " + index);
    }

    private static void sortNewArr() {
        int[] arr = {1, 2, 5, 6, 14, 36, 37, 55};
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您要插入的数：");
        int a = scanner.nextInt();
//        arr[arr.length-1] = a;
        int[] newArr = Arrays.copyOf(arr, arr.length + 1);
        newArr[newArr.length - 1] = a;
        Arrays.sort(newArr);
        System.out.println("新数组排序后：" + Arrays.toString(newArr));
    }

    private static void printNums() {
        for (int i = 1; i <= 6; i++) {//行数
            for (int j = 7 - i; j >= 0; j--) {//空格数
                System.out.print(" ");
            }
            //**************************
            //根据行数逆序输出，且从第二行才开始输出，不输出1，到2就停
            for (int j = i; j >= 2; j--) {//前面的数字（关键）
                System.out.print(j);
            }
            //*******************************
            for (int j = 1; j <= i; j++) {//后面的数字
                System.out.print(j);
            }
            System.out.println();
        }
    }


    private static void getBall() {
        double hight = 100.0;
        double distance = 0.0;
        for (int i = 0; i < 10; i++) {
//            distance = distance + hight + hight * 0.5;
            distance += (1.5) * hight;
            System.out.println(distance);
            hight *= 0.5;
            System.out.println(hight);
        }
        System.out.println("第10次落地时，共经过" + distance + "米");
        System.out.println("第10次反弹时的高度：" + hight + "米");
    }

    /*求第五个人的年龄*/
    private static void getAge() {
        int age = 10;
        for (int i = 2; i <= 5; i++) {
            age += 2;
        }
        System.out.println("第五个人的年龄是：" + age);
    }

    /*根据利润算奖金*/
    private static void getBonus(Scanner scanner) {
        //利润
        double profit = scanner.nextDouble();
        //奖金
        double bonus = 0.0;
        if (profit <= 100000.0) {
            bonus = profit * (1 + 0.1);
        } else if (profit <= 200000.0) {
            bonus = 100000 * 0.1 + (profit - 100000) * 0.075 + profit;
        } else if (profit <= 400000.0) {
            bonus = 100000 * 0.1
                    + 100000 * 0.075
                    + (profit - 200000) * 0.05
                    + profit;
        } else if (profit <= 600000.0) {
            bonus = 100000 * 0.1
                    + 100000 * 0.075
                    + 200000 * 0.05
                    + (profit - 400000) * 0.03
                    + profit;
        } else if (profit <= 1000000.0) {
            bonus = 100000 * 0.1
                    + 100000 * 0.075
                    + 200000 * 0.05
                    + 200000 * 0.03
                    + (profit - 600000) * 0.015
                    + profit;
        } else {
            bonus = 100000 * 0.1
                    + 100000 * 0.075
                    + 200000 * 0.05
                    + 200000 * 0.03
                    + 400000 * 0.015
                    + (profit - 1000000) * 0.01
                    + profit;
        }
        System.out.println("奖金为：" + bonus);
    }
}
